#ifndef OJLB_OJ_COMPILER_OJ_COMPILE_RUN_H_
#define OJLB_OJ_COMPILER_OJ_COMPILE_RUN_H_
#include <string>
#include <atomic>
#include "oj_common/oj_transfer.h"
#include "oj_common/oj_log.h"
#include "oj_common/oj_time.h"
#include "oj_compile_run/oj_compiler.h"
#include "oj_compile_run/oj_runer.h"
namespace ojlb {
namespace oj_compiler_run {

/** 本次 json 协议规定, 用户在点击运行后, 就会发送以下 json 交互
 *  in_json: {
 *      "user": 用户名,
 *      "title": 题目,
 *      "code": 用户传输的代码,
 *      "code_input": 用户程序的标准输入(暂不开放),
 *      "programming_language": 程序语法,
 *      "cpu_limit": 运行限制, // TODO: 后续禁用这个键
 *      "mem_limit": 内存限制 // TODO: 后续禁用这个键
 *  }
 * 
 *  out_json: {
 *      "status": 状态码,
 *      "reason": 请求结果,
 *      "code_stdout": 用户程序的标准输出,
 *      "code_stderr": 用户程序的标准错误,
 *      "time_stamp": 毫秒级时间戳,
 *      "id": 唯一标识
 *  }
 *  
 *  用户数量是经常变动的, 但是题目数量是稳定的
 * 
 *  /title_name/user_name.c
 *  /title_name/user_name.cc
 *  /title_name/user_name.java
 */

// 类定义
class OjCompileRun { // ! 这个类主要是作为中间层适配的存在, 和客户端的 json 数据进行编译运行
public:
    static void start(const std::string& in_json_str, std::string& out_json_str);

private:
    static std::string statusToReason(const int& status);
}; // class OjCompileRun end


} // namespace oj_compiler_run end
} // namespace ojlb end
#endif
